﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Lola.DTO;

namespace Lola.Datos.Persistencia
{
    public static class pServicio
    {
        /// <summary>
        /// ana
        /// </summary>
        /// <param name="cod"></param>
        /// <returns></returns>
        public static Servicio buscarServicio(string cod)
        {
            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                Servicio servicio=null;
                var query = from p in contextSeminarioI.Servicios
                            where p.cod.Equals(cod)
                            select p;
               
                    servicio = query.FirstOrDefault();

                return servicio;
            }
        }

        /// <summary>
        /// ana
        /// </summary>
        /// <param name="estado"></param>
        /// <param name="cod"></param>
        public static void actualizarEstado(string estado, string cod)
        {
            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                var query = from p in contextSeminarioI.Servicios
                            where p.cod.Equals(cod)
                            select p;
                Servicio servicio = query.First();
                servicio.estado = estado;
                contextSeminarioI.SaveChanges();

            }
        }

        /// <summary>
        /// ana
        /// </summary>
        /// <returns></returns>
        public static List<Servicio> buscarTodosLosServiciosPorGalpon(string galpon)
        {
            using (SeminarioIEntities contextSeminarioI = new SeminarioIEntities())
            {
                 List<Servicio> lista=new List<Servicio>();
                var query1= from ise in contextSeminarioI.InformeSectors
                            where ise.SectorGalpon.Galpon.nomGal.Equals(galpon)
                            & ise.SectorGalpon.Sector.nomSec.Equals("Porteria")
                            & ise.fechaEntrada.HasValue
                            & !ise.fechaSalida.HasValue
                            select ise;

                foreach (InformeSector isctr in query1)
                {
                    var query2= from s in contextSeminarioI.Servicios
                            where s.cod==isctr.cod
                            select s;
                          
                    lista.Add(query2.FirstOrDefault<Servicio>());
                }
                

                return lista;
            }

        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="codigoServicio"></param>
        /// <returns></returns>
        public static dtoServicio getServicioDTO(String codigoServicio)
        {
            dtoServicio resultado = null;

            using (SeminarioIEntities contexto = new SeminarioIEntities())
            {
                var q = from s in contexto.Servicios 
                        where s.cod.Equals(codigoServicio) 
                        select s;

                if (q.Count() > 0)
                {
                    Servicio res = q.First();
                    resultado = new dtoServicio(res.cod, res.fechaSalidaSer.ToString(), res.origen, res.destino, res.Micro.numInt);
                }

            }

            return resultado;

        }


        /// <summary>
        /// Devuelve si el servicio puede salir del galpon
        /// </summary>
        /// <param name="codigoServicio"></param>
        /// <returns></returns>
        public static bool ServicioHabilitadoParaSalir(string galpon, string sector, string codigoServicio)
        {
            using (SeminarioIEntities contexto = new SeminarioIEntities())
            {
                // el servicio ingreso al galpon
                var q = from s in contexto.InformeSectors
                        where s.SectorGalpon.Sector.nomSec.Equals("Porteria")
                        & s.SectorGalpon.Galpon.nomGal.Equals(galpon)
                        & s.Servicio.cod.Equals(codigoServicio)
                        & s.fechaEntrada.HasValue
                        & !s.fechaSalida.HasValue
                        select s;

                if (q.Count() == 0)
                {
                    return false;
                }

                // el micro salio del sector suministros
                var qq = from ss in contexto.InformeSectors
                         where ss.SectorGalpon.Sector.nomSec.Equals("Suministros")
                         & ss.SectorGalpon.Galpon.nomGal.Equals(galpon)
                         & ss.Servicio.cod.Equals(codigoServicio)
                         & ss.fechaSalida.HasValue
                         select ss;

                if (qq.Count() == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }

            }
        }
    }
}
